package com.sskj.common.util;

import java.util.concurrent.ThreadLocalRandom;

public class IdUtil {

    // 十六进制字符表，用于快速转换字节到字符
    private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();

    public static String fastUUID() {
        // 使用 ThreadLocalRandom 提高并发性能（相比 UUID.randomUUID() 内部使用的 SecureRandom）
        ThreadLocalRandom random = ThreadLocalRandom.current();

        // UUID 是 128 位 = 16 字节
        long mostSigBits = random.nextLong(); // 高64位
        long leastSigBits = random.nextLong(); // 低64位

        // 预分配 StringBuilder，避免扩容
        StringBuilder sb = new StringBuilder(32);

        // 手动拼接高64位（16个十六进制字符）
        appendHex(sb, mostSigBits);
        // 手动拼接低64位（16个十六进制字符）
        appendHex(sb, leastSigBits);

        return sb.toString();
    }

    /**
     * 将 long 值转为 16 个十六进制字符，追加到 StringBuilder
     */
    private static void appendHex(StringBuilder sb, long val) {
        for (int i = 15; i >= 0; i--) {
            int hexPos = (int) ((val >> (i * 4)) & 0xF);
            sb.append(HEX_DIGITS[hexPos]);
        }
    }
}
